package com.proxy;



import com.dao.Act;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

//影星的经纪人
public class MovieStarProxy implements MethodInterceptor {

        // 目标对象
        private Object targetObject; //成龙经纪人目标对象肯定是成龙

        //传入一个代理之前的对象，返回一个被代理对象。
        public Object newProxyInstance(Object targetObject){
            this.targetObject=targetObject;
            Enhancer enhancer = new Enhancer();
            // 设置enhancer对象的父类
//            enhancer.setSuperclass(this.targetObject.getClass().getSuperclass());
            enhancer.setInterfaces(this.targetObject.getClass().getSuperclass().getInterfaces());
            // 设置enhancer的回调对象
            enhancer.setCallback(this);
            // 创建代理对象
            return (Act)enhancer.create();

        }

        //演戏之前要做的事情
        private void beforeAct(){
            System.out.println("洽谈档期..");
            System.out.println("洽谈片酬..");
            System.out.println("洽谈广告合作..");
        }

        //演戏之后要做的事情
        private void afterAct(){
            System.out.println("洽谈首映仪式..");
            System.out.println("洽谈颁奖典礼..");
        }


        public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            Object ret = null;

            this.beforeAct();
            //调用成龙真正的演戏方法
            ret =method.invoke(this.targetObject,objects);
            this.afterAct();
            return ret;
        }
}
